home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1993 December
/
PSL Monthly Shareware CD-ROM (December 1993).iso
/
prgmming
/
dos
/
basic
/
qsort.bas
< prev
next >
Wrap
BASIC Source File
|
1984-04-14
|
3KB
|
72 lines
10 '' QUICKSORT SORTING ALGORITHM DEMONSTRATION
20 '' NELSON FORD APRIL 1984
30 ''
40 DEFINT A-Z: CLS: KEY OFF: COLOR 7,0: LAST=26: DIM DTA$(LAST)
50 FOR I=1 TO LAST: READ DTA$(I): NEXT
60 DATA H,G,C,V,B,N,M,A,S,D,F,Z,X,J,K,L,Q,I,O,W,E,R,T,Y,U,P
70 FLAG1=-1: FLAG2=-1: FLAG3=-1
75 COLR1= 7: COLR2= 15: COLR3= 0
80 GOSUB 460
90 '
100 '''''''''''sort:
110 '
120 BOT(1)=1: TOP(1)=LAST: PLY=1
130 WHILE PLY > 0
140 IF BOT(PLY) >= TOP(PLY) THEN PLY=PLY-1: GOTO 300
150 I=BOT(PLY)-1: J=TOP(PLY): KY$=DTA$(J)
160 WHILE I < J
170 I=I+1: J=J-1
180 LN=180: WHILE DTA$(I) < KY$: I=I+1: GOSUB 330: WEND
190 IF FLAG1 THEN GOSUB 530
200 LN=200: WHILE DTA$(J) > KY$ AND J > I: J=J-1: GOSUB 330: WEND
210 IF FLAG2 THEN GOSUB 600
220 IF I<J THEN LN=220: GOSUB 690 'go swap
230 WEND
240 IF FLAG3 THEN GOSUB 630
250 J=TOP(PLY): IF I=J THEN 280
260 LN=260: GOSUB 330
270 IF DTA$(I) > DTA$(J) THEN LN=270: GOSUB 690
280 IF I-BOT(PLY) < TOP(PLY)-I THEN BOT(PLY+1)=BOT(PLY): TOP(PLY+1)=I-1: BOT(PLY)=I+1: ELSE TOP(PLY+1)=TOP(PLY): BOT(PLY+1)=I+1: TOP(PLY)=I-1
290 PLY=PLY+1
300 WEND
310 COLOR 15: PRINT "SORTED: ";: FOR I=1 TO 26: PRINT " "DTA$(I);: NEXT
320 END
330 '
340 PRINT LN" ";
350 FOR X=FIRST TO LAST
360 FG=7: BG=0 'foreground and background colors
370 IF X = I THEN FG=15
380 IF X = J THEN BG= 7: IF FG=7 THEN FG=0
390 IF X = TOP(PLY) THEN FG=FG+16
400 IF X < BOT(PLY) OR X > TOP(PLY) THEN FG=1
410 COLOR FG,BG
420 PRINT " " DTA$(X);: COLOR 7,0
430 NEXT: PRINT
440 RETURN
450 '
460 PRINT "FIRST SEARCH UP THE LIST UNTIL AN ";: COLOR 15
470 PRINT "ITEM ";: COLOR 7
480 PRINT "LARGER THAN THE ";: COLOR 23
490 PRINT "KEY";: COLOR 7: PRINT " IS FOUND,": PRINT
500 PRINT "PROGRAM ": PRINT "LINE #": XXX=9
510 RETURN
520 '
530 PRINT :PRINT "THEN SEARCH DOWN THE LIST UNTIL AN ";: COLOR 0,7
540 PRINT " ITEM";: COLOR 7,0
550 PRINT " LESS THAN THE ";: COLOR 23
560 PRINT "KEY";: COLOR 7: PRINT " IS FOUND. (GO";
570 INPUT X$: FLAG1=0
580 RETURN
590 '
600 INPUT "IF POINTERS HAVE NOT CROSSED, SWAP ITEMS AND CONTINUE. (GO"; X$
610 FLAG2=0: RETURN
620 '
630 PRINT"WHEN THE POINTERS CROSS, DIVIDE THE LIST AND SORT THE SMALLER PART."
640 PRINT"BUT FIRST, COMPARE THE ";: COLOR 15
650 PRINT"ITEM";: COLOR 7: PRINT " AT THE BREAK TO THE ";: COLOR 23:
660 PRINT "KEY": COLOR 7: PRINT " AND SWAP IF ";: COLOR 15
670 PRINT"ITEM";: COLOR 7: INPUT " IS LARGER. (GO"; X$
680 FLAG3=0: RETURN
690 SWAP DTA$(I), DTA$(J): PRINT TAB(27)"SWAP " DTA$(J) " AND " DTA$(I)
700 GOSUB 330: RETURN